package com.train.proxy;

import com.train.pojos.Star;
import com.train.pojos.StarAction;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
 * 动态代理工具类
 * */
public class ProxyUtils {
    public static StarAction createProxy(Star star){
        StarAction starAction = (StarAction) Proxy.newProxyInstance(
                ProxyUtils.class.getClassLoader(),
                new Class[]{StarAction.class},
                new InvocationHandler() {
                    /**
                     * @param proxy 代理对象，star子类的实例
                     * @param method 我们需要调用什么方法？sing/writeSong
                     * @param args 调用上述方法传入的参数
                     * */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if ( method.getName().equals("sing") )
                            System.out.println( star.name +"唱此曲收费90W");// 唱歌需要收费
                        return method.invoke(star,args);// 代理让对象做事情
                    }
                }
        );
        return starAction;
    }
}
